<?php
 // +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 应用公共文件
use think\Db;

function findThePhoneNumbers($oldStr = ""){
    // 检测字符串是否为空
    $oldStr=trim($oldStr);
    $numbers = array();
    if(empty($oldStr)){
        return $numbers;
    }
    // 删除86-180640741122，0997-8611222之类的号码中间的减号（-）
    $strArr = explode("-", $oldStr);
    $newStr = $strArr[0];
    for ($i=1; $i < count($strArr); $i++) {
        if (preg_match("/\d{2}$/", $newStr) && preg_match("/^\d{11}/", $strArr[$i])){
            $newStr .= $strArr[$i];
        } elseif (preg_match("/\d{3,4}$/", $newStr) && preg_match("/^\d{7,8}/", $strArr[$i])) {
            $newStr .= $strArr[$i];
        } else {
            $newStr .= "-".$strArr[$i];
        }
    }
    // 手机号的获取
    $reg='/\D(?:86)?(\d{11})\D/is';//匹配数字的正则表达式
    preg_match_all($reg,$newStr,$result);
    $nums = array();
    // * 中国移动：China Mobile
    // * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
    $cm = "/^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\d)\d{7}$/";
    // * 中国联通：China Unicom
    // * 130,131,132,152,155,156,185,186
    $cu = "/^1(3[0-2]|5[256]|8[56])\d{8}$/";
    // * 中国电信：China Telecom
    // * 133,1349,153,180,189
    $ct = "/^1((33|53|8[09])[0-9]|349)\d{7}$/";
    //
    foreach ($result[1] as $key => $value) {
        if(preg_match($cm,$value)){
            $nums[] = array("number" => $value, "type" => "中国移动");
        }elseif(preg_match($cu,$value)){
            $nums[] = array("number" => $value, "type" => "中国联通");
        }elseif(preg_match($ct,$value)){
            $nums[] = array("number" => $value, "type" => "中国电信");
        }else{
            // 非法号码
        }
    }
    $numbers["mobile"] = $nums;
//    // 固定电话或小灵通的获取
//    $reg='/\D(0\d{10,12})\D/is';//匹配数字的正则表达式
//    preg_match_all($reg,$newStr,$result);
//    $nums = array();
//    // * 大陆地区固定电话或小灵通
//    // * 区号：010,020,021,022,023,024,025,027,028,029
//    // * 号码：七位或八位
//    $phs = "/^0(10|2[0-5789]|\d{3})\d{7,8}$/";
//    foreach ($result[1] as $key => $value) {
//        if(preg_match($phs, $value)){
//            $nums[] = array("number" => $value, "type" => "固定电话或小灵通");
//        } else {
//            // 非法
//        }
//    }
//    $numbers["landline"] = $nums;
//    // 有可能是没有区号的固定电话的获取
//    $reg='/\D(\d{7,8})\D/is';//匹配数字的正则表达式
//    preg_match_all($reg,$newStr,$result);
//    $nums = array();
//    foreach ($result[1] as $key => $value) {
//        $nums[] = array("number" => $value, "type" => "没有区号的固定电话");
//    }
//    $numbers["possible"] = $nums;
    // 返回最终数组
    $newStr = $oldStr;
    if ($numbers["mobile"]){
        foreach ($numbers["mobile"] as $index=>$value){
            $newStr =  str_replace($value,substr_replace($value,'****',3,4),$newStr);
        }
    }
    return $newStr;
}

function get_table_field($table = '',$id = '',$val ='',$field = ''){
    $img = Db::table($table)->where($id,$val)->field($field)->find();
    $img_url="";
    if ($img){
        switch ($img['type']){
            case 0:
                //本地上传
                $img_url = $img['save_name'];
                break;
            case 1:
                //cos上传的图片
                $img_url = 'http://'.$img['file_name'];
                break;
            case 2:
                //阿里云 上传的图片
                $img_url = $img['file_name'];
                break;
        }
    }
    return $img_url;
}

function getOrderSn()
{
    $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
    $orderSn = $yCode[intval(date('Y')) - 2011]
        . strtoupper(dechex(date('m')))
        . date('d') . substr(time(), -5)
        . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));
    return $orderSn;
}

function getMqRouteKey($userMark,$type,$isCancle=false)
{
//    $result = "BUY";
//    if ($type==0){
//        $result = "SELL_SHORT";
//    }
//    if ($userMark){
//        $result = $result.".".$userMark;
//    }
//    if ($isCancle){
//        $result = "CANCEL_".$result;
//    }
    $result="*";
    if ($userMark){
        $result = $userMark;
    }
    return $result;
}

function moneyRecord($uid,$num,$type,$desc,$coin="EUSDT")
{
    $data["uid"] = $uid;
    $data["coin"] = $coin;
    $data["num"] = $num;
    $data["type"] = $type;
    $data["desc"] = $desc;
    $data["time"] = time();
    $insertData = Db::table('tb_money_record')->insert($data);
    return $insertData;
}

/**
 * @param $str
 * @param $pattern
 * @return bool $str是否以 $pattern 开头
 */
function startwith($str,$pattern) {
    if(strpos($str,$pattern) === 0)
        return true;
    else
        return false;
}

function getValueByDo($value,$len)
{
    return number_format($value,$len,".","");
}
function get_config($type, $key = 'value')
{
    $other = db('configOther')->where('type', $type)->find();
    return $other[$key];
}

function get_auth($uid, $key)
{
    $auth = db('auth')->where('uid', $uid)->find();
    if ($auth) {
        return $auth[$key];
    }
    return 0;
}

/**
 * @param $profit 应该释放的所有收益
 * @param $max  已经释放了的收益
 * @param $rate 收益比率
 */
function profitNumber($profit,$max,$rate){
    //假如释放收益为0 ；或者 释放次数为0  则返回 0
    if ($profit==0||$rate==0){
        return 0;
    }
    //平均每次释放收益数量
    $number = bcmul($profit,$rate,4);
    //收益剩余数量
    $surplus= bcsub($profit,$max,4);

    if ($surplus<=0){
        //假如没有剩余收益 则 返回0
        return 0;
    }elseif ($surplus>$number){
        //假如没有剩余收益 大于 释放收益 则返回 释放收益
        return $number;
    }else{
        return $surplus;
    }
}



/**
 * 更新用户矿机收益释放情况
 * @param $machine 用户购买的矿机
 * @param $usdtReleseNumber 用户收益的usdt
 * @param $cpaReleseNumber 用户收益的 cpa
 * @return int|string
 * @throws \think\Exception
 * @throws \think\exception\PDOException
 */
function updateProfitMachineUser($machine,$usdtReleseNumber,$cpaReleseNumber){
    /**
     * 用户矿机 释放数量增加 已经是否释放完的状态变更
     */
    //计算获取此前usdt+这次释放的 数量
    $machineUserUsdtMax = bcadd( $machine["usdt_max"],$usdtReleseNumber,4);
    //计算获取此前cpa +这次释放的 数量
    $machineUserCpaMax = bcadd( $machine["cpa_max"],$cpaReleseNumber,4);

    $profit_usdt_finish = $machineUserUsdtMax>=$machine['profit_usdt'];
    //判断是否释放完成
    $status = $profit_usdt_finish &&  $machineUserCpaMax>=$machine['profit_cpa'] ?0 : 1;
    //插表
    $machineUserUpdateData = array();
    $machineUserUpdateData['usdt_max'] = $machineUserUsdtMax;
    $machineUserUpdateData['cpa_max'] = $machineUserCpaMax;
    $machineUserUpdateData['status'] = $status;
    //team_status 0 新增为结算团队算力；1过期为结算团队算力 2 是新增一结算 3 过期已阶段 过期定义为 usdt已经释放完 结算为上线已增加（或减少）此用户的算力
    //如果usdt 已经释放完成：已处理过的团队算力 $machine["team_status"] 则变成已完成 未处理
     if ($machine["team_status"]==2&&$profit_usdt_finish){
        $machineUserUpdateData['team_status'] = 1;
    }
     //如果usdt 已经释放完成 但是还未结算过团队算力 则直接变为处理完成
     else if ($machine["team_status"]==0&&$profit_usdt_finish){
        $machineUserUpdateData['team_status'] = 3;
    }
    if ($status==0){
        $machineUserUpdateData['finish_time'] = time();
    }

    $machineUserUpdate =  Db::table('tb_machine_user')->where("id",$machine["id"])->update($machineUserUpdateData);
    return $machineUserUpdate;
}

/**
 * @param $machine 用户购买的矿机
 * @param $usdtReleseNumber 用户收益的usdt
 * @param $cpaReleseNumber 用户收益的 cpa
 * @param $cpaReleseAdd 直推赠送的 CPA
 * @return int|string
 * @throws \think\Exception
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\ModelNotFoundException
 * @throws \think\exception\DbException
 * @throws \think\exception\PDOException
 */
function updateDayUserProfit($uid,$usdtReleseNumber,$cpaReleseNumber,$cpaReleseAdd){
    /**
     * 用户每天释放数量汇总
     */

    //今天时间
    $time =date('Y-m-d');
    $userDayProfit = Db::table('tb_profit_day')->where("uid",$uid)->whereTime("time",$time)->find();
    $userDayProfitInsert=array();
    //如果此用户 存在今天收益 则收益累加
    if ($userDayProfit){
        $usdt = bcadd($userDayProfit["usdt"],$usdtReleseNumber,4);
        $userDayProfitInsert['usdt']=$usdt;
        $userDayProfitInsert['cpa']= bcadd( $userDayProfit["cpa"],$cpaReleseNumber,4);
        $userDayProfitInsert['cpa_add']= bcadd( $userDayProfit["cpa_add"],$cpaReleseAdd,4);
        $profitDayRes = Db::table('tb_profit_day')->where("id",$userDayProfit["id"])->update($userDayProfitInsert);
    }else{
        //如果此用户 不存在今天收益 则入库
        $userDayProfitInsert['uid']= $uid;
        $userDayProfitInsert['time']=$time;
        $userDayProfitInsert['receive']= 0;
        $userDayProfitInsert['usdt']= $usdtReleseNumber;
        $userDayProfitInsert['cpa']= $cpaReleseNumber;
        $userDayProfitInsert['cpa_add']= $cpaReleseAdd;
        $profitDayRes = Db::table('tb_profit_day')->insert($userDayProfitInsert);
    }

    return  $profitDayRes;
}

function withdrawCoinFee($usdt){
//    团队业绩0——5000 u       15%
//    团队业绩5000——10000 u   14%
//    团队业绩10000——15000u   13%
//    团队业绩15000——20000u   12%
//    团队业绩20000——25000u   11%
//    团队业绩25000——50000u   10%
        if ($usdt<=5000){
            return 0.15;
        }
        if ($usdt<=10000){
            return 0.14;
        }
        if ($usdt<=15000){
            return 0.13;
        }
        if ($usdt<=20000){
            return 0.12;
        }
        if ($usdt<=25000){
            return 0.11;
        }
    return  0.10;
}
